# 使用 Ubuntu 20.04 作为基础镜像
FROM ubuntu:20.04

# 设置环境变量，避免在安装过程中出现交互提示
ENV DEBIAN_FRONTEND=noninteractive

# 设置 APT 国内镜像源（阿里云）
RUN sed -i 's|http://archive.ubuntu.com/ubuntu/|http://mirrors.aliyun.com/ubuntu/|g' /etc/apt/sources.list

# 更新包列表并安装必要的依赖
RUN apt-get update && apt-get install -y \
    build-essential \
    curl \
    git \
    sudo \
    wget \
    unzip \
    python3.8 \
    python3-pip \
    python3.8-venv \
    clang \
    && rm -rf /var/lib/apt/lists/*

# 配置 Python
RUN ln -s /usr/bin/python3.8 /usr/bin/python

# 设置 Rust 国内镜像源
ENV RUSTUP_DIST_SERVER=https://mirrors.ustc.edu.cn/rust-static
ENV RUSTUP_UPDATE_ROOT=https://mirrors.ustc.edu.cn/rust-static/rustup

# 安装 Rust
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y && \
    /root/.cargo/bin/rustup --version && \
    rm -rf /root/.rustup/toolchains/stable-*/install.sh

# 将 Rust 的 bin 目录添加到 PATH
ENV PATH="/root/.cargo/bin:${PATH}"

# 创建并设置工作目录
WORKDIR /usr/src/interoptool

# 设置 pip 国内镜像源（阿里云）
RUN pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/

# 升级 pip
RUN pip install --upgrade pip

# 安装 pysqlite3-binary
RUN pip install pysqlite3-binary

# 安装 PyTorch
RUN pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu

# 安装 transformers 和 sentence-transformers
RUN pip install transformers sentence-transformers

# 复制项目文件
COPY . .

# 预先安装 Rust 依赖项

# 设置 Rust 项目的工作目录
WORKDIR /usr/src/interoptool/Output/algorithms

# 复制 Cargo.toml 和 Cargo.lock 文件（已经在上一步复制了整个项目，这里可以省略）
# COPY Output/algorithms/Cargo.toml Output/algorithms/Cargo.lock ./

# 创建临时的 src 目录和 main.rs 文件
RUN mkdir -p src && echo 'fn main() {}' > src/main.rs

# 预先构建依赖项
RUN cargo build --release

# 删除临时的 main.rs 文件
RUN rm -f src/main.rs

# 返回到项目根目录
WORKDIR /usr/src/interoptool

# 复制其余的项目文件（已经在上一步复制了整个项目，这里可以省略）
# COPY . .

# 安装 Python 依赖，添加 --ignore-installed 标志
RUN pip install --no-cache-dir --ignore-installed -r Tool/requirements.txt

# 赋予 run.sh 执行权限
RUN chmod +x run.sh

# 默认执行 run.sh 脚本
CMD ["./run.sh"]

